// 编写一个包含2个线程的程序，在主线程中创建一个全局变量并初始化为0
// 在另一个线程对这个全局变量进行递加运算，并在结束时向主线程返回一个结果，由主线程打印输出。
#include <iostream>
#include <pthread.h>
#include <unistd.h>

using namespace std;

// 全局变量
int globalVar = 0;
pthread_mutex_t g_mutex; // 互斥量

// 线程函数
void *add(void *arg)
{
    // 线程分离
    pthread_detach(pthread_self());

    for (int i = 0; i < 100; i++)
    {
        // 加锁
        pthread_mutex_lock(&g_mutex);
        globalVar++; // 对全局变量进行递加
        pthread_mutex_unlock(&g_mutex);
    }

    // 返回结果给主线程
    return nullptr;
}

int main()
{
    pthread_t thread; // 线程ID

    // 创建线程
    int ret = pthread_create(&thread, NULL, add, NULL);
    if (ret != 0)
    {
        perror("thread creat error");
        exit(-1);
    }

    // 等待子线程完成操作（通过 sleep 等待）
    sleep(1); // 等待分离线程完成递加操作

    // 打印结果
    cout << "全局变量的最终值: " << globalVar << endl;

    pthread_mutex_destroy(&g_mutex); // 销毁互斥量

    return 0;
}